package it.azienda.managerworkstandard.view;

import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.view.Dettaglio;
import it.azienda.managerworkstandard.modello.BeanClienteCont;
import it.azienda.managerworkstandard.modello.BeanFattura;
import java.util.ArrayList;
import org.hibernate.Query;
import org.hibernate.Session;

public class DettaglioClienteCont extends Dettaglio{
    
    
    public DettaglioClienteCont() { }
    
    
    public ArrayList situazione(Integer idCliente){
        ArrayList listaClienteCont=new ArrayList();
        try{
            String query="select fattura from BeanFattura fattura where fattura.beanCliente.id = :idCliente";
            Query q=null;
            Session sessione = DAOConnectionSingleton.newSession();
            DAOConnectionSingleton.beginTransaction();
            q = sessione.createQuery(query);
            q.setInteger("idCliente", idCliente.intValue());
            ArrayList lista = (ArrayList) q.list();
            DAOConnectionSingleton.commitTransaction();
            
            if(lista.size()!=0){
                Double differenza= new Double(0);
                for(int i=0;i<lista.size();i++){
                    BeanFattura beanFattura = (BeanFattura)lista.get(i);
                    BeanClienteCont beanClienteCont = new BeanClienteCont();
                    String descrizione = "";
                    descrizione += "Fattura numero "+beanFattura.getCodice();
                    String[] splitData1 = beanFattura.getData().toString().split("-");
                    descrizione += " - del "+splitData1[2].toString()+"/"+splitData1[1].toString()+"/"+splitData1[0].toString();
                    beanClienteCont.setDescrizione(descrizione);
                    beanClienteCont.setDare(beanFattura.getTotale());
                    differenza = arrotonda(new Double(differenza.doubleValue() + beanFattura.getTotale().doubleValue()),2);
                    beanClienteCont.setDifferenza(differenza);
                    listaClienteCont.add(beanClienteCont);
                    
                    if(beanFattura.getData1()!=null && beanFattura.getImporto1()!=null){
                        if(beanFattura.getPagato1().equals("S")){
                            beanClienteCont = new BeanClienteCont();
                            String[] splitData = beanFattura.getData1().toString().split("-");
                            descrizione = "";
                            descrizione += "Fattura "+beanFattura.getCodice()+
                                    ": Pagata Rata n.1, il "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                            beanClienteCont.setDescrizione(descrizione);
                            beanClienteCont.setAvere(beanFattura.getImporto1());
                            differenza = arrotonda(new Double(differenza.doubleValue() - beanFattura.getImporto1().doubleValue()),2);
                            beanClienteCont.setDifferenza(differenza);
                            listaClienteCont.add(beanClienteCont);
                        }
                    }
                    if(beanFattura.getData2()!=null && beanFattura.getImporto2()!=null){
                        if(beanFattura.getPagato2().equals("S")){
                            beanClienteCont = new BeanClienteCont();
                            String[] splitData = beanFattura.getData1().toString().split("-");
                            descrizione = "";
                            descrizione += "Fattura "+beanFattura.getCodice()+
                                    ": Pagata Rata n.2, il "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                            beanClienteCont.setDescrizione(descrizione);
                            beanClienteCont.setAvere(beanFattura.getImporto2());
                            differenza = arrotonda(new Double(differenza.doubleValue() - beanFattura.getImporto2().doubleValue()),2);
                            beanClienteCont.setDifferenza(differenza);
                            listaClienteCont.add(beanClienteCont);
                        }
                    }
                    if(beanFattura.getData3()!=null && beanFattura.getImporto3()!=null){
                        if(beanFattura.getPagato3().equals("S")){
                            beanClienteCont = new BeanClienteCont();
                            String[] splitData = beanFattura.getData3().toString().split("-");
                            descrizione = "";
                            descrizione += "Fattura "+beanFattura.getCodice()+
                                    ": Pagata Rata n.3, il "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                            beanClienteCont.setDescrizione(descrizione);
                            beanClienteCont.setAvere(beanFattura.getImporto3());
                            differenza = arrotonda(new Double(differenza.doubleValue() - beanFattura.getImporto3().doubleValue()),2);
                            beanClienteCont.setDifferenza(differenza);
                            listaClienteCont.add(beanClienteCont);
                        }
                    }
                    if(beanFattura.getData4()!=null && beanFattura.getImporto4()!=null){
                        if(beanFattura.getPagato4().equals("S")){
                            beanClienteCont = new BeanClienteCont();
                            String[] splitData = beanFattura.getData4().toString().split("-");
                            descrizione = "";
                            descrizione += "Fattura "+beanFattura.getCodice()+
                                    ": Pagata Rata n.4, il "+splitData[2].toString()+"/"+splitData[1].toString()+"/"+splitData[0].toString();
                            beanClienteCont.setDescrizione(descrizione);
                            beanClienteCont.setAvere(beanFattura.getImporto4());
                            differenza = arrotonda(new Double(differenza.doubleValue() - beanFattura.getImporto4().doubleValue()),2);
                            beanClienteCont.setDifferenza(differenza);
                            listaClienteCont.add(beanClienteCont);
                        }
                    }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
            System.out.println("Errore"+e);
        } finally {
            DAOConnectionSingleton.closeSession();
        }
        return listaClienteCont;
    }
    
    public Double arrotonda(Object obj,int precisione){
        Double valore=(Double)obj;
        Double valoreArr=new Double(0);
        double pot = Math.pow(10, precisione);
        double  v = valore.doubleValue() * pot;
        valoreArr = new Double(Math.round(v) / pot);
        return valoreArr;
    }
}
